package xyz.lwm.lazycat.utility.reflect;

import org.jetbrains.annotations.NotNull;

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;

/**
 * 所有注解信息, 包含父类的注解, 以及注解的注解, 各种嵌套注解.
 * 注意: 基础注解过滤不获取
 *
 * @author lwm
 */
public interface Annotations extends AnnotatedElement {

    /**
     * 判断当前元素是否包含指定注解
     *
     * @param annotationType 注解类型
     * @return 是否包含
     * @param <T> 注解类型
     */
    <T extends Annotation> boolean hasAnnotation(@NotNull Class<T> annotationType);

    /**
     * 添加新的注解
     *
     * @param element annotated element
     */
    void addAnnotations(@NotNull AnnotatedElement element);

}
